Java-তে Serializer এবং Deserializer ব্যবহার করে ডেটা সিরিয়ালাইজ এবং ডেসিরিয়ালাইজ করার সময় কনফিগারেশন খুব গুরুত্বপূর্ণ। এটি ডেটা ফরম্যাট, সিকিউরিটি, পারফরম্যান্স এবং কাস্টম প্রয়োজনীয়তার উপর নির্ভর করে কনফিগারেশন সেটআপ করা সম্ভব করে।
Serializer Configuration
Serializer ব্যবহার করে Java অবজেক্টকে ডেটা ফরম্যাটে রূপান্তরিত করা হয় (যেমন, JSON, XML, বা বাইনারি)। কনফিগারেশনে নিম্নলিখিত বিষয়গুলো বিবেচনা করা হয়:
১. Java Serialization (Default)
- ডিফল্টভাবে,
ObjectOutputStreamঅবজেক্টকে বাইনারি ফরম্যাটে সিরিয়ালাইজ করে। - নির্দিষ্ট ফিল্ড বাদ দিতে
transientকিওয়ার্ড ব্যবহার করা হয়। Custom Configuration:
private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); // ডিফল্ট সিরিয়ালাইজেশন oos.writeObject(customData); // কাস্টম ডেটা যোগ করা }
২. JSON Serialization
- জনপ্রিয় লাইব্রেরি: Jackson, Gson।
Jackson Serializer Configuration:
ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // null ভ্যালু বাদ দিন mapper.enable(SerializationFeature.INDENT_OUTPUT); // ফরম্যাটিং String json = mapper.writeValueAsString(object);
৩. XML Serialization
- জনপ্রিয় লাইব্রেরি: JAXB, XStream।
JAXB Configuration:
JAXBContext context = JAXBContext.newInstance(MyClass.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // সুন্দর ফরম্যাট marshaller.marshal(object, new File("output.xml"));
৪. Custom Serializer
সংবেদনশীল ডেটা এনক্রিপ্ট করা বা নির্দিষ্ট ফরম্যাটে রূপান্তর করতে কাস্টম লজিক ব্যবহার করা হয়।
public class CustomSerializer extends StdSerializer<MyClass> { @Override public void serialize(MyClass value, JsonGenerator gen, SerializerProvider provider) throws IOException { gen.writeStartObject(); gen.writeStringField("name", value.getName().toUpperCase()); // ডেটা কাস্টমাইজ করা gen.writeEndObject(); } }
Deserializer Configuration
Deserializer ডেটা ফরম্যাট (যেমন JSON, XML, বা বাইনারি) থেকে Java অবজেক্টে রূপান্তর করে। কনফিগারেশনে ডেটা যাচাই, ফিল্ড ম্যাপিং, এবং বিশেষ ডেটা টাইপের জন্য নিয়ম প্রয়োগ করা হয়।
১. Java Deserialization (Default)
ObjectInputStreamব্যবহার করে বাইনারি ডেটা পুনরুদ্ধার করা হয়।Custom Configuration:
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { ois.defaultReadObject(); // ডিফল্ট ডেসিরিয়ালাইজেশন customData = (String) ois.readObject(); // কাস্টম ডেটা পুনরুদ্ধার }
২. JSON Deserialization
Jackson Deserializer Configuration:
ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // অজানা প্রপার্টি এড়িয়ে যান MyClass obj = mapper.readValue(jsonString, MyClass.class);
৩. XML Deserialization
JAXB Configuration:
JAXBContext context = JAXBContext.newInstance(MyClass.class); Unmarshaller unmarshaller = context.createUnmarshaller(); MyClass object = (MyClass) unmarshaller.unmarshal(new File("input.xml"));
৪. Custom Deserializer
নির্দিষ্ট ফিল্ড ভ্যালিডেশন বা কাস্টম ফরম্যাটে ডেটা ম্যাপ করার জন্য কাস্টম ডেসিরিয়ালাইজার প্রয়োজন।
public class CustomDeserializer extends StdDeserializer<MyClass> { @Override public MyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { JsonNode node = p.getCodec().readTree(p); String name = node.get("name").asText().toLowerCase(); // কাস্টম ডেটা প্রক্রিয়াকরণ return new MyClass(name); } }
Serializer এবং Deserializer কনফিগারেশনের উপযোগিতা
- ডেটা নিরাপত্তা: সংবেদনশীল ডেটা এনক্রিপ্ট ও ডিক্রিপ্ট করা।
- ফরম্যাট কাস্টমাইজেশন: JSON, XML, বা অন্যান্য ফরম্যাট অনুযায়ী ডেটা সিরিয়ালাইজ/ডেসিরিয়ালাইজ করা।
- ভ্যালিডেশন: ডেসিরিয়ালাইজেশনের সময় ডেটার গঠন এবং মান যাচাই করা।
- পারফরম্যান্স: নির্দিষ্ট ফিল্ড বাদ দিয়ে পারফরম্যান্স বাড়ানো।
Jackson Serializer এবং Deserializer ব্যবহার
Serializer:
public class CustomSerializer extends StdSerializer<MyClass> {
public CustomSerializer() {
super(MyClass.class);
}
@Override
public void serialize(MyClass value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeStringField("name", "Mr. " + value.getName());
gen.writeEndObject();
}
}
Deserializer:
public class CustomDeserializer extends StdDeserializer<MyClass> {
public CustomDeserializer() {
super(MyClass.class);
}
@Override
public MyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
JsonNode node = p.getCodec().readTree(p);
String name = node.get("name").asText().replace("Mr. ", ""); // নাম থেকে "Mr." বাদ দেয়া
return new MyClass(name);
}
}
ObjectMapper Configuration:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(MyClass.class, new CustomSerializer());
module.addDeserializer(MyClass.class, new CustomDeserializer());
mapper.registerModule(module);
এই কনফিগারেশনগুলোর মাধ্যমে আপনার সিরিয়ালাইজার এবং ডেসিরিয়ালাইজার আরো কার্যকর এবং নিরাপদ করা সম্ভব।
Read more